package com.huluspace.learnhub.ai;

import com.huluspace.learnhub.model.Content;
import com.huluspace.learnhub.repository.ContentRepository;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.Optional;

@Component
public class AIContentProcessor {

  private final RedisTemplate<String, Object> redisTemplate;
  private final ContentRepository contentRepository;
  private final ChatClient chatClient;
  public AIContentProcessor(RedisTemplate<String, Object> redisTemplate, ContentRepository contentRepository, ChatClient chatClient) {
    this.redisTemplate = redisTemplate;
    this.contentRepository = contentRepository;
    this.chatClient = chatClient;
  }

  @Scheduled(fixedDelay = 5000) // 每5秒检查一次
  public void processQueue() {
    Object raw = redisTemplate.opsForList().rightPop("ai-content-queue");
    if (raw != null) {
      Long contentId = ((Number) raw).longValue();
      System.out.println("处理contentId: " + contentId);

      Optional<Content> contentOpt = contentRepository.findById(contentId);
      if (contentOpt.isPresent()) {
        Content content = contentOpt.get();

        // 通过AI解析内容
        String prompt = """
            # 任务说明
            你需要从提供的原始文本中提取以下四类信息：类型、标题、标签、内容。
            # 类型（type）
            - 类型必须在以下五个选项中选择其一：问题、简报、经验、通知、其他。
            - 如果内容不属于前四种明确类型，请标记为“其他”。
            # 标题（title）
            - 提炼一个简洁、有代表性的中文标题，**不超过20个汉字**。
            - 标题应能够概括内容核心，不添加冗余修饰。
            # 标签（tags）
            - 提取最多5个**与内容高度相关**的关键词作为标签。
            - 标签请使用数组格式，例如：["AI", "性能优化"]。
            # 内容（content）
            - 在不改变原意的前提下，对原始内容进行适度润色，使其结构更清晰、表达更流畅。如果是英文则在原文之后另外开启段落进行简单翻译。
            # 返回格式
            以严格的JSON字符串形式返回（注意字段拼写与结构）：
            {
              "type": "xxx",
              "title": "xxx",
              "tags": ["标签1", "标签2"],
              "content": "优化后的完整内容"
            }
            # 待分析内容
            %s
            """.formatted(content.getBody());
        String jsonResult = chatClient.prompt(prompt).call().content();
        AIContentResult result = AIUtils.parse(jsonResult);
        content.setType(result.getType());
        content.setTitle(result.getTitle());
        content.setBody(result.getContent());
        content.setTags(String.join(",", result.getTags()));
        content.setAiProcessed(true);
        contentRepository.save(content);
      } else {
        System.out.println("未找到内容: " + contentId);
      }
    }
  }




}

